<?php

// Global variable for table object
$psacar_category = NULL;

//
// Table class for psacar_category
//
class cpsacar_category {
	var $TableVar = 'psacar_category';
	var $TableName = 'psacar_category';
	var $TableType = 'TABLE';
	var $category_id;
	var $category_name;
        var $image;
	var $fields = array();
	var $UseTokenInUrl = EW_USE_TOKEN_IN_URL;
	var $Export; // Export
	var $ExportOriginalValue = EW_EXPORT_ORIGINAL_VALUE;
	var $ExportAll = TRUE;
	var $SendEmail; // Send email
	var $TableCustomInnerHtml; // Custom inner HTML
	var $BasicSearchKeyword; // Basic search keyword
	var $BasicSearchType; // Basic search type
	var $CurrentFilter; // Current filter
	var $CurrentOrder; // Current order
	var $CurrentOrderType; // Current order type
	var $RowType; // Row type
	var $CssClass; // CSS class
	var $CssStyle; // CSS style
	var $RowAttrs = array(); // Row custom attributes
	var $TableFilter = "";
	var $CurrentAction; // Current action
	var $UpdateConflict; // Update conflict
	var $EventName; // Event name
	var $EventCancelled; // Event cancelled
	var $CancelMessage; // Cancel message

	//
	// Table class constructor
	//
	function cpsacar_category() {
            global $Language;

            // category_id
            $this->category_id = new cField('psacar_category', 'psacar_category', 'x_category_id', 'category_id', '`category_id`', 19, -1, FALSE, '`category_id`', FALSE);
            $this->category_id->FldDefaultErrMsg = $Language->Phrase("IncorrectInteger");
            $this->fields['category_id'] =& $this->category_id;

            // category_name
            $this->category_name = new cField('psacar_category', 'psacar_category', 'x_category_name', 'category_name', '`category_name`', 200, -1, FALSE, '`category_name`', FALSE);
            $this->fields['category_name'] =& $this->category_name;

            // image
            $this->image = new cField('psacar_category', 'psacar_category', 'x_image', 'image', '`image`', 200, -1, TRUE, '`image`', FALSE);
            $this->image->UploadPath = "../system/public/assets/categories/";
            $this->fields['image'] =& $this->image;
	}

	// Table caption
	function TableCaption() {
            global $Language;
            return $Language->TablePhrase($this->TableVar, "TblCaption");
	}

	// Page caption
	function PageCaption($Page) {
            global $Language;
            $Caption = $Language->TablePhrase($this->TableVar, "TblPageCaption" . $Page);
            if ($Caption == "") $Caption = "Page " . $Page;
            return $Caption;
	}

	// Export return page
	function ExportReturnUrl() {
            $url = @$_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_EXPORT_RETURN_URL];
            return ($url <> "") ? $url : ew_CurrentPage();
	}

	function setExportReturnUrl($v) {
            $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_EXPORT_RETURN_URL] = $v;
	}

	// Records per page
	function getRecordsPerPage() {
            return @$_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_REC_PER_PAGE];
	}

	function setRecordsPerPage($v) {
            $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_REC_PER_PAGE] = $v;
	}

	// Start record number
	function getStartRecordNumber() {
            return @$_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_START_REC];
	}

	function setStartRecordNumber($v) {
            $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_START_REC] = $v;
	}

	// Search highlight name
	function HighlightName() {
            return "psacar_category_Highlight";
	}

	// Advanced search
	function getAdvancedSearch($fld) {
            return @$_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_ADVANCED_SEARCH . "_" . $fld];
	}

	function setAdvancedSearch($fld, $v) {
            if (@$_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_ADVANCED_SEARCH . "_" . $fld] <> $v) {
                $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_ADVANCED_SEARCH . "_" . $fld] = $v;
            }
	}

	// Basic search keyword
	function getSessionBasicSearchKeyword() {
            return @$_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_BASIC_SEARCH];
	}

	function setSessionBasicSearchKeyword($v) {
            $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_BASIC_SEARCH] = $v;
	}

	// Basic search type
	function getSessionBasicSearchType() {
            return @$_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_BASIC_SEARCH_TYPE];
	}

	function setSessionBasicSearchType($v) {
            $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_BASIC_SEARCH_TYPE] = $v;
	}

	// Search WHERE clause
	function getSearchWhere() {
            return @$_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_SEARCH_WHERE];
	}

	function setSearchWhere($v) {
            $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_SEARCH_WHERE] = $v;
	}

	// Single column sort
	function UpdateSort(&$ofld) {
            if ($this->CurrentOrder == $ofld->FldName) {
                $sSortField = $ofld->FldExpression;
                $sLastSort = $ofld->getSort();
                if ($this->CurrentOrderType == "ASC" || $this->CurrentOrderType == "DESC") {
                        $sThisSort = $this->CurrentOrderType;
                } else {
                        $sThisSort = ($sLastSort == "ASC") ? "DESC" : "ASC";
                }
                $ofld->setSort($sThisSort);
                $this->setSessionOrderBy($sSortField . " " . $sThisSort); // Save to Session
            } 
            else {
                $ofld->setSort("");
            }
	}

	// Session WHERE clause
	function getSessionWhere() {
            return @$_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_WHERE];
	}

	function setSessionWhere($v) {
            $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_WHERE] = $v;
	}

	// Session ORDER BY
	function getSessionOrderBy() {
            return @$_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_ORDER_BY];
	}

	function setSessionOrderBy($v) {
            $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_ORDER_BY] = $v;
	}

	// Session key
	function getKey($fld) {
            return @$_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_KEY . "_" . $fld];
	}

	function setKey($fld, $v) {
            $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_KEY . "_" . $fld] = $v;
	}

	// Table level SQL
	function SqlFrom() { // From
            return "`psacar_category`";
	}

	function SqlSelect() { // Select
            return "SELECT * FROM " . $this->SqlFrom();
	}

	function SqlWhere() { // Where
            $sWhere = "";
            $this->TableFilter = "";
            if ($this->TableFilter <> "") {
                if ($sWhere <> "") 
                    $sWhere .= "(" . $sWhere . ") AND (";
                $sWhere .= "(" . $this->TableFilter . ")";
            }
            return $sWhere;
	}

	function SqlGroupBy() { // Group By
            return "";
	}

	function SqlHaving() { // Having
            return "";
	}

	function SqlOrderBy() { // Order By
            return "";
	}

	// Check if Anonymous User is allowed
	function AllowAnonymousUser() {
            switch (EW_PAGE_ID) {
                case "add":
                case "register":
                case "addopt":
                    return FALSE;
                case "edit":
                case "update":
                    return FALSE;
                case "delete":
                    return FALSE;
                case "view":
                    return FALSE;
                case "search":
                        return FALSE;
                default:
                    return FALSE;
            }
	}

	// Apply User ID filters
	function ApplyUserIDFilters($sFilter) {
            return $sFilter;
	}

	// Get SQL
	function GetSQL($where, $orderby) {
            return ew_BuildSelectSql($this->SqlSelect(), $this->SqlWhere(),
                $this->SqlGroupBy(), $this->SqlHaving(), $this->SqlOrderBy(),
                $where, $orderby);
	}

	// Table SQL
	function SQL() {
            $sFilter = $this->CurrentFilter;
            $sFilter = $this->ApplyUserIDFilters($sFilter);
            $sSort = $this->getSessionOrderBy();
            return ew_BuildSelectSql($this->SqlSelect(), $this->SqlWhere(),
                $this->SqlGroupBy(), $this->SqlHaving(), $this->SqlOrderBy(),
                $sFilter, $sSort);
	}

	// Table SQL with List page filter
	function SelectSQL() {
            $sFilter = $this->getSessionWhere();
            if ($this->CurrentFilter <> "") {
                if ($sFilter <> "") $sFilter = "(" . $sFilter . ") AND ";
                $sFilter .= "(" . $this->CurrentFilter . ")";
            }
            $sFilter = $this->ApplyUserIDFilters($sFilter);
            $sSort = $this->getSessionOrderBy();
            return ew_BuildSelectSql($this->SqlSelect(), $this->SqlWhere(), $this->SqlGroupBy(),
                $this->SqlHaving(), $this->SqlOrderBy(), $sFilter, $sSort);
	}

	// Try to get record count
	function TryGetRecordCount($sSql) {
		global $conn;
		$cnt = -1;
		if ($this->TableType == 'TABLE' || $this->TableType == 'VIEW') {
			$sSql = "SELECT COUNT(*) FROM" . substr($sSql, 13);
		} else {
			$sSql = "SELECT COUNT(*) FROM (" . $sSql . ") EW_COUNT_TABLE";
		}
		if ($rs = $conn->Execute($sSql)) {
			if (!$rs->EOF && $rs->FieldCount() > 0) {
				$cnt = $rs->fields[0];
				$rs->Close();
			}
		}
		return intval($cnt);
	}

	// Get record count based on filter (for detail record count in master table pages)
	function LoadRecordCount($sFilter) {
		$origFilter = $this->CurrentFilter;
		$this->CurrentFilter = $sFilter;
		$this->Recordset_Selecting($this->CurrentFilter);
		$sSql = $this->SQL();
		$cnt = $this->TryGetRecordCount($sSql);
		if ($cnt == -1) {
			if ($rs = $this->LoadRs($this->CurrentFilter)) {
				$cnt = $rs->RecordCount();
				$rs->Close();
			}
		}
		$this->CurrentFilter = $origFilter;
		return intval($cnt);
	}

	// Get record count (for current List page)
	function SelectRecordCount() {
		global $conn;
		$origFilter = $this->CurrentFilter;
		$this->Recordset_Selecting($this->CurrentFilter);
		$sSql = $this->SelectSQL();
		$cnt = $this->TryGetRecordCount($sSql);
		if ($cnt == -1) {
			if ($rs = $conn->Execute($this->SelectSQL())) {
				$cnt = $rs->RecordCount();
				$rs->Close();
			}
		}
		$this->CurrentFilter = $origFilter;
		return intval($cnt);
	}

	// INSERT statement
	function InsertSQL(&$rs) {
            global $conn;
            $names = "";
            $values = "";
            foreach ($rs as $name => $value) {
                    $names .= $this->fields[$name]->FldExpression . ",";
                    $values .= ew_QuotedValue($value, $this->fields[$name]->FldDataType) . ",";
            }
            if (substr($names, -1) == ",") $names = substr($names, 0, strlen($names)-1);
            if (substr($values, -1) == ",") $values = substr($values, 0, strlen($values)-1);
            return "INSERT INTO `psacar_category` ($names) VALUES ($values)";
	}

	// UPDATE statement
	function UpdateSQL(&$rs) {
            global $conn;
            $SQL = "UPDATE `psacar_category` SET ";
            foreach ($rs as $name => $value) {
                    $SQL .= $this->fields[$name]->FldExpression . "=";
                    $SQL .= ew_QuotedValue($value, $this->fields[$name]->FldDataType) . ",";
            }
            if (substr($SQL, -1) == ",") $SQL = substr($SQL, 0, strlen($SQL)-1);
            if ($this->CurrentFilter <> "")	$SQL .= " WHERE " . $this->CurrentFilter;
            return $SQL;
	}

	// DELETE statement
	function DeleteSQL(&$rs) {
            $SQL = "DELETE FROM `psacar_category` WHERE ";
            $SQL .= ew_QuotedName('category_id') . '=' . ew_QuotedValue($rs['category_id'], $this->category_id->FldDataType) . ' AND ';
            if (substr($SQL, -5) == " AND ") $SQL = substr($SQL, 0, strlen($SQL)-5);
            if ($this->CurrentFilter <> "")	$SQL .= " AND " . $this->CurrentFilter;
            return $SQL;
	}

	// Key filter WHERE clause
	function SqlKeyFilter() {
            return "`category_id` = @category_id@";
	}

	// Key filter
	function KeyFilter() {
            $sKeyFilter = $this->SqlKeyFilter();
            if (!is_numeric($this->category_id->CurrentValue))
                    $sKeyFilter = "0=1"; // Invalid key
            $sKeyFilter = str_replace("@category_id@", ew_AdjustSql($this->category_id->CurrentValue), $sKeyFilter); // Replace key value
            return $sKeyFilter;
	}

	// Return page URL
	function getReturnUrl() {
            $name = EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_RETURN_URL;

            // Get referer URL automatically
            if (ew_ServerVar("HTTP_REFERER") <> "" && ew_ReferPage() <> ew_CurrentPage() && ew_ReferPage() <> "login.php") // Referer not same page or login page
                    $_SESSION[$name] = ew_ServerVar("HTTP_REFERER"); // Save to Session
            if (@$_SESSION[$name] <> "") {
                    return $_SESSION[$name];
            } else {
                    return "psacar_categorylist.php";
            }
	}

	function setReturnUrl($v) {
            $_SESSION[EW_PROJECT_NAME . "_" . $this->TableVar . "_" . EW_TABLE_RETURN_URL] = $v;
	}

	// List URL
	function ListUrl() {
            return "psacar_categorylist.php";
	}

	// View URL
	function ViewUrl() {
            return $this->KeyUrl("psacar_categoryview.php", $this->UrlParm());
	}

	// Add URL
	function AddUrl() {
            $AddUrl = "psacar_categoryadd.php";
            $sUrlParm = $this->UrlParm();
            if ($sUrlParm <> "")
                    $AddUrl .= "?" . $sUrlParm;
            return $AddUrl;
	}

	// Edit URL
	function EditUrl() {
            return $this->KeyUrl("psacar_categoryedit.php", $this->UrlParm());
	}

	// Inline edit URL
	function InlineEditUrl() {
            return $this->KeyUrl(ew_CurrentPage(), $this->UrlParm("a=edit"));
	}

	// Copy URL
	function CopyUrl() {
            return $this->KeyUrl("psacar_categoryadd.php", $this->UrlParm());
	}

	// Inline copy URL
	function InlineCopyUrl() {
            return $this->KeyUrl(ew_CurrentPage(), $this->UrlParm("a=copy"));
	}

	// Delete URL
	function DeleteUrl() {
            return $this->KeyUrl("psacar_categorydelete.php", $this->UrlParm());
	}

	// Add key value to URL
	function KeyUrl($url, $parm = "") {
            $sUrl = $url . "?";
            if ($parm <> "") $sUrl .= $parm . "&";
            if (!is_null($this->category_id->CurrentValue)) {
                    $sUrl .= "category_id=" . urlencode($this->category_id->CurrentValue);
            } else {
                    return "javascript:alert(ewLanguage.Phrase(\"InvalidRecord\"));";
            }
            return $sUrl;
	}

	// Sort URL
	function SortUrl(&$fld) {
            if ($this->CurrentAction <> "" || $this->Export <> "" ||
                    in_array($fld->FldType, array(128, 204, 205))) { // Unsortable data type
                            return "";
            } elseif ($fld->Sortable) {
                    $sUrlParm = $this->UrlParm("order=" . urlencode($fld->FldName) . "&ordertype=" . $fld->ReverseSort());
                    return ew_CurrentPage() . "?" . $sUrlParm;
            } else {
                    return "";
            }
	}

	// Add URL parameter
	function UrlParm($parm = "") {
            $UrlParm = ($this->UseTokenInUrl) ? "t=psacar_category" : "";
            if ($parm <> "") {
                    if ($UrlParm <> "")
                            $UrlParm .= "&";
                    $UrlParm .= $parm;
            }
            return $UrlParm;
	}

	// Load rows based on filter
	function &LoadRs($sFilter) {
            global $conn;

            // Set up filter (SQL WHERE clause) and get return SQL
            $this->CurrentFilter = $sFilter;
            $sSql = $this->SQL();
            return $conn->Execute($sSql);
	}

	// Load row values from recordset
	function LoadListRowValues(&$rs) {
            $this->category_id->setDbValue($rs->fields('category_id'));
            $this->category_name->setDbValue($rs->fields('category_name'));
            $this->image->Upload->DbValue = $rs->fields('image');
	}

	// Render list row values
	function RenderListRow() {
            global $conn, $Security;

            // Call Row Rendering event
            $this->Row_Rendering();

            // Common render codes
            // category_id

            $this->category_id->CellCssStyle = ""; $this->category_id->CellCssClass = "";
            $this->category_id->CellAttrs = array(); $this->category_id->ViewAttrs = array(); $this->category_id->EditAttrs = array();

            // category_name
            $this->category_name->CellCssStyle = ""; $this->category_name->CellCssClass = "";
            $this->category_name->CellAttrs = array(); $this->category_name->ViewAttrs = array(); $this->category_name->EditAttrs = array();

            // image
            $this->image->CellCssStyle = ""; $this->image->CellCssClass = "";
            $this->image->CellAttrs = array(); $this->image->ViewAttrs = array(); $this->image->EditAttrs = array();

            // category_id
            $this->category_id->ViewValue = $this->category_id->CurrentValue;
            $this->category_id->CssStyle = "";
            $this->category_id->CssClass = "";
            $this->category_id->ViewCustomAttributes = "";

            // category_name
            $this->category_name->ViewValue = $this->category_name->CurrentValue;
            $this->category_name->CssStyle = "";
            $this->category_name->CssClass = "";
            $this->category_name->ViewCustomAttributes = "";

            // image
            if (!ew_Empty($this->image->Upload->DbValue)) {
                    $this->image->ViewValue = $this->image->Upload->DbValue;
            } else {
                    $this->image->ViewValue = "";
            }
            $this->image->CssStyle = "";
            $this->image->CssClass = "";
            $this->image->ViewCustomAttributes = "";

            // category_id
            $this->category_id->HrefValue = "";
            $this->category_id->TooltipValue = "";

            // category_name
            $this->category_name->HrefValue = "";
            $this->category_name->TooltipValue = "";

            // image
            if (!ew_Empty($this->image->Upload->DbValue)) {
                $this->image->HrefValue = ew_UploadPathEx(FALSE, $this->image->UploadPath) . ((!empty($this->image->ViewValue)) ? $this->image->ViewValue : $this->image->CurrentValue);
                if ($this->Export <> "") 
                    $psacar_category->image->HrefValue = ew_ConvertFullUrl($this->image->HrefValue);
            } 
            else {
                $this->image->HrefValue = "";
            }
            $this->image->TooltipValue = "";

            // Call Row Rendered event
            $this->Row_Rendered();
	}

	// Aggregate list row values
	function AggregateListRowValues() {
	}

	// Aggregate list row (for rendering)
	function AggregateListRow() {
	}

	// Row styles
	function RowStyles() {
            $sAtt = "";
            $sStyle = trim($this->CssStyle);
            if (@$this->RowAttrs["style"] <> "")
                    $sStyle .= " " . $this->RowAttrs["style"];
            $sClass = trim($this->CssClass);
            if (@$this->RowAttrs["class"] <> "")
                    $sClass .= " " . $this->RowAttrs["class"];
            if (trim($sStyle) <> "")
                    $sAtt .= " style=\"" . trim($sStyle) . "\"";
            if (trim($sClass) <> "")
                    $sAtt .= " class=\"" . trim($sClass) . "\"";
            return $sAtt;
	}

	// Row attributes
	function RowAttributes() {
		$sAtt = $this->RowStyles();
		if ($this->Export == "") {
			foreach ($this->RowAttrs as $k => $v) {
				if ($k <> "class" && $k <> "style" && trim($v) <> "")
					$sAtt .= " " . $k . "=\"" . trim($v) . "\"";
			}
		}
		return $sAtt;
	}

	// Field object by name
	function fields($fldname) {
		return $this->fields[$fldname];
	}

	// Table level events
	// Recordset Selecting event
	function Recordset_Selecting(&$filter) {

		// Enter your code here	
	}

	// Recordset Selected event
	function Recordset_Selected(&$rs) {

		//echo "Recordset Selected";
	}

	// Recordset Search Validated event
	function Recordset_SearchValidated() {

		// Example:
		//global $MyTable;
		//$MyTable->MyField1->AdvancedSearch->SearchValue = "your search criteria"; // Search value

	}

	// Recordset Searching event
	function Recordset_Searching(&$filter) {

		// Enter your code here	
	}

	// Row_Selecting event
	function Row_Selecting(&$filter) {

		// Enter your code here	
	}

	// Row Selected event
	function Row_Selected(&$rs) {

		//echo "Row Selected";
	}

	// Row Rendering event
	function Row_Rendering() {

		// Enter your code here	
	}

	// Row Rendered event
	function Row_Rendered() {

		// To view properties of field class, use:
		//var_dump($this-><FieldName>); 

	}

	// Row Inserting event
	function Row_Inserting(&$rs) {

		// Enter your code here
		// To cancel, set return value to FALSE

		return TRUE;
	}

	// Row Inserted event
	function Row_Inserted(&$rs) {

		//echo "Row Inserted"
	}

	// Row Updating event
	function Row_Updating(&$rsold, &$rsnew) {

		// Enter your code here
		// To cancel, set return value to FALSE

		return TRUE;
	}

	// Row Updated event
	function Row_Updated(&$rsold, &$rsnew) {

		//echo "Row Updated";
	}

	// Row Update Conflict event
	function Row_UpdateConflict(&$rsold, &$rsnew) {

		// Enter your code here
		// To ignore conflict, set return value to FALSE

		return TRUE;
	}

	// Row Deleting event
	function Row_Deleting(&$rs) {

		// Enter your code here
		// To cancel, set return value to False

		return TRUE;
	}

	// Row Deleted event
	function Row_Deleted(&$rs) {

		//echo "Row Deleted";
	}

	// Email Sending event
	function Email_Sending(&$Email, &$Args) {

		//var_dump($Email); var_dump($Args); exit();
		return TRUE;
	}
}
?>
